package com.ustcinfo.study.scala.r5.pengqiang

import org.apache.spark.{SparkConf, SparkContext}

/**
  * Auther: pengqiang
  * Date: 2018/8/3 17:40
  * Description: scala wordcount练习
  */
object WordCount {
  def main(args: Array[String]): Unit = {
//    println("Hello World!")
    val sparkConf = new SparkConf().setMaster("local").setAppName("pengqiang_scala_test")  //运行模式，程序运行名称
    val sc = new SparkContext(sparkConf)
    val txtRdd = sc.textFile("src/main/resources/programmingGuide")  //读取文件
//    System.setProperty("hadoop.home.dir", "E:\\hadoop-common-2.2.0-bin-master");
    txtRdd
      .filter(x => x.trim().length >0) //去除垃圾数据，降低噪声
      .map(x => x.split(" "))         //将每一行的RDD数据集转换成一个一维数组
      .flatMap(x => x)                //将一个一系列一维数据组成的二维数组类型rdd转换成一个一维数组的rdd
      .map(x => (x,1))                //将每一个单词映射成 （单词, 1）
      .reduceByKey(_+_)               //相当于mr的reduce，内部自动加和
      .map(x => (x._2,x._1))          //将类型为（单词，1）的rdd类型转换为（1，单词）
      .sortByKey(false)              //根据key来做降序排序
      .take(10)                      //取rdd前十个
      .foreach(println)              //循环打印
  }
}
